/**
 * @Title: PoiDeleteRowDemo.java
 * @Package net.tt 
 * @Description: TODO
 * @author tbc
 * @date 2016年6月11日 下午6:03:25
 * @version
 */
package net.tt;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import net.tt.util.CloseUtil;

/**
 * 
 * @author tbc
 * @version 1.0 create:{2016年6月11日 下午6:03:25}
 * 
 */
public class PoiDeleteRowDemo {
	private static Logger log = LoggerFactory.getLogger(PoiDeleteRowDemo.class);

	// static XSSFWorkbook wb;
	static XSSFSheet sheet;

	/**
	 * sheet.shiftRows(startRow,endRow,shiftCount)参数说明:<br>
	 * $startRow 移动的开始行号,从0开始计算, <br>
	 * 如果想要删除Excel中的第8行(rownum=7),那么starRow设定为7,即设定为你想删除的那行<br>
	 * $endRow 移动的结束行号，从0开始计算。通过startRow和endRow选定移动的范围。<br>
	 * 可以用sheet.getLastRowNum 来取得sheet的结尾行号<br>
	 * $shiftCount 移动多少行。正数是往下移动的行数，负数是往上移动的行数<br>
	 * （经过vb.net 2008 + NPOI 1.3的测试，负数只能是－1，如果需要往上移动多行，那么只有循环了）<br>
	 * 
	 * @author tbc
	 * @version 1.0 create:{2016年6月12日 下午5:42:28}
	 */
	public static void main(String[] args) throws Exception {
		File file = new File("h:\\Users\\tbc\\Desktop\\安徽华菱16年05月 - 副本 - 副本.xlsx");

		InputStream in = null;
		XSSFWorkbook excelBook = null;
		try {
			in = new FileInputStream(file);
			excelBook = new XSSFWorkbook(in);
			if (in != null) {
				CloseUtil.close(in);
			}
		} catch (FileNotFoundException e) {
			log.error("read file error : {}", e.getMessage());
		} catch (IOException e) {
			log.error("create XSSFWorkbook error : {}", e.getMessage());
		}

		sheet = excelBook.getSheetAt(0);
		int sl = 0;

		XSSFRow row0 = sheet.getRow(0);
		for (int i = 0; i < row0.getLastCellNum(); i++) {
			if ("数量".equals(row0.getCell(i).getStringCellValue())) {
				sl = i;
			}
		}

		int i = sheet.getLastRowNum();

		while (i > 1) {
			i--;
			log.debug("row:{}, column: {}, lastRowNum: {}", i, sl, sheet.getLastRowNum());
			XSSFRow row = sheet.getRow(i);
			XSSFCell cell = row.getCell(sl);
			System.out.println(cell.getCellType());
			if (cell.getNumericCellValue() == 0.0) {
				sheet.shiftRows(i + 1, sheet.getLastRowNum(), -1);
				System.out.println("----------------------------------------------------> " + i);
			}
		}

		OutputStream out = new FileOutputStream(file);
		excelBook.write(out);
		if (out != null) {
			CloseUtil.close(out);
		}

	}
}
